import { Select as AntSelect } from 'antd'
import { forwardRef } from 'react'

type SelectProps = React.ComponentProps<typeof AntSelect>
type ScrollAlign = 'top' | 'bottom' | 'auto'
type ScrollConfig =
  | {
      index: number
      align?: ScrollAlign
      offset?: number
    }
  | {
      key: React.Key
      align?: ScrollAlign
      offset?: number
    }
type ScrollTo = (arg: number | ScrollConfig) => void

export interface BaseSelectRef {
  focus: () => void
  blur: () => void
  scrollTo: ScrollTo
}

// export interface SelectProps<ValueType = any, OptionType extends DefaultOptionType | BaseOptionType = DefaultOptionType> /* extends React.ComponentProps<typeof AntSelect> */ {
//   /**
//    * 支持清除
//    * @default false
//    */
//   allowClear?: boolean
//   /**
//    * 是否禁用
//    * @default false
//    */
//   disabled?: boolean
//   /**
//    * 自定义节点 label、value、options 的字段
//    * @default  "{label: label, value: value, options: options }"
//    */
//   fieldNames?: object
//   /**
//    * 是否根据输入项进行筛选
//    * @default true
//    */
//   filterOption?: boolean | ((inputValue: any, option: any) => boolean)
//   /**
//    * 搜索时对筛选结果项的排序函数,类似Array.sort里的 compareFunction
//    */
//   filterSort?: (optionA: DefaultOptionType | BaseOptionType , optionB: DefaultOptionType | BaseOptionType ) => number
//   /**
//    * 设置 Select 的模式为多选或标签
//    */
//   mode?: 'multiple' | 'tags'
//   /**
//    * 搜索时过滤对应的 option 属性
//    * @default value
//    */
//   optionFilterProp?: 'label' | 'value' | 'children'
//   /**
//    * 数据化配置选项内容，相比 jsx 定义会获得更好的渲染性能
//    */
//   options?: OptionType[]
//   /**
//    * 选择框默认文本
//    */
//   placeholder?: string
//   /**
//    * 	配置是否可搜索
//    * @default 单选为 false，多选为 true
//    */
//   showSearch?: boolean
//   /**
//    * 自定义的选择框后缀图标
//    */
//   suffixIcon?: React.ReactNode
//   /**
//    * 指定当前选中的条目，多选时为一个数组。
//    */
//   value?: ValueType | null
//   /**
//    * 选中 option，或 input 的 value 变化时，调用此函数
//    */
//   onChange?: (value: ValueType, option: OptionType | OptionType[]) => void;
// }

export const Select = forwardRef((props: SelectProps, ref: React.Ref<BaseSelectRef> | undefined) => {
  return <AntSelect ref={ref} placeholder="请选择" showArrow {...props} />
})
